1 Test Bərabərləşdirilməsinə Giriş

1.1 Dərsin Məqsədləri

Bu dərsin sonunda siz:

✅ Test bərabərləşdirilməsinin mahiyyətini və əhəmiyyətini başa düşəcəksiniz
✅ Üfüqi və şaquli bərabərləşdirmə arasındakı fərqi öyrənəcəksiniz
✅ R-də test bərabərləşdirmə üçün lazım olan paketləri quraşdıra biləcəksiniz
✅ Sadə test məlumatları yarada və təhlil edə biləcəksiniz


1.2 Test Bərabərləşdirilməsinin Mahiyyəti

Test bərabərləşdirilməsi (test equating) müxtəlif test formalarının və ya müxtəlif vaxtlarda aparılan testlərin nəticələrini müqayisə edilə bilən şəkildə çevirən statistik prosesdir. Bu proses təhsildə ədalətli qiymətləndirmə üçün vacibdir.

1.2.1 Nə üçün lazımdır?

Təsəvvür edin ki, siz universitet qəbul imtahanına hazırlaşırsınız. Sizin imtahan tarixiniz Mart ayıdır, dostunuzunkü isə May ayında. May ayındakı test daha çətin olsa, siz ədalətli qiymətləndirilmiş olacaqsınız?

Test bərabərləşdirmə bu problemi həll edir!

1.2.2 Bərabərləşdirmənin Faydaları

  • 📊 Ədalətli müqayisə: Müxtəlif test versiyalarının nəticələri ədalətli şəkildə müqayisə olunur
  • 📈 Uzunmüddətli izləmə: Şagirdlərin inkişafını vaxt keçdikcə izləmək mümkün olur
  • 🎯 Keyfiyyət təminatı: Test keyfiyyətinin sabit saxlanılması təmin edilir
  • 🔄 Çeviklik: Müxtəlif test formalarından istifadə imkanı

1.3 Üfüqi və Şaquli Bərabərləşdirmə

1.3.1 Üfüqi Bərabərləşdirmə (Horizontal Equating)

Təyin: Eyni səviyyədə olan müxtəlif test formalarının nəticələrini bərabərləşdirir.

Nümunələr:

  • Riyaziyyat testinin A və B formalarının müqayisəsi

  • TOEFL testinin müxtəlif tarixlərdə aparılan versiyaları

  • Sürücülük imtahanının müxtəlif formları

1.3.2 Şaquli Bərabərləşdirmə (Vertical Equating)

Təyin: Müxtəlif səviyyələrdə olan testlərin nəticələrini bərabərləşdirir.

Nümunələr:

  • 8-ci sinif riyaziyyat testini 9-cu sinif riyaziyyat testi ilə əlaqələndirmək

  • İbtidai təhsil səviyyəsindən orta təhsil səviyyəsinə keçid

  • Dil öyrənməsində A1 səviyyəsindən A2 səviyyəsinə keçid

Üfüqi və Şaquli Bərabərləşdirmənin Vizual Təqdimatı

Üfüqi və Şaquli Bərabərləşdirmənin Vizual Təqdimatı


1.4 R Proqram Dili ilə Hazırlıq

1.4.1 Lazım olan paketlərin quraşdırılması

Test bərabərləşdirmə üçün bir neçə specialized R paketi mövcuddur. Gəlin onları quraşdıraq:

# Lazım olan paketləri yükləyin
install.packages(c(
  "equate",      # Ümumi bərabərləşdirmə metodları
  "kequate",     # Kernel bərabərləşdirmə
  "SNSequate",   # Score linking metodları  
  "ltm",         # IRT modelləri
  "psych",       # Psixometrik analiz
  "ggplot2",     # Vizuallaşdırma
  "dplyr",       # Məlumat manipulyasiyası
  "knitr",       # Hesabat yaratma
  "plotly"       # İnteraktiv qrafiklər
))

1.4.2 Paketlərin aktivləşdirilməsi

# Paketləri aktivləşdirin
suppressMessages({
  library(equate)      # Test bərabərləşdirmə metodları
  library(kequate)     # Kernel metodlar
  library(SNSequate)   # Score linking
  library(ltm)         # Item Response Theory
  library(psych)       # Psixometrik təhlil
  library(ggplot2)     # Qrafik vizuallaşdırma  
  library(dplyr)       # Məlumat manipulyasiyası
  library(knitr)       # Cədvəl formatlaşdırması
  library(plotly)      # İnteraktiv qrafiklər
})

# R versiyasını və paket versiyalarını yoxlayın
cat("R versiyası:", R.version.string, "\n")
## R versiyası: R version 4.2.3 (2023-03-15)
cat("equate paketi versiyası:", as.character(packageVersion("equate")), "\n")
## equate paketi versiyası: 2.0.8
cat("ggplot2 paketi versiyası:", as.character(packageVersion("ggplot2")), "\n")
## ggplot2 paketi versiyası: 3.5.2

1.4.3 İşçi mühitin konfiqurasiyası

# Təsadüfi nömrə generatoru üçün seed təyin edin
set.seed(2024)

# Qrafik parametrləri
theme_set(theme_minimal(base_size = 12))

# Rəngli palitra təyin edin
colors_custom <- c("#3498db", "#e74c3c", "#2ecc71", "#f39c12", "#9b59b6")

# Məlumat strukturu üçün default formatlar
options(
  digits = 3,
  scipen = 999,
  width = 80
)

cat("✅ R mühiti uğurla konfiqurasiya edildi!\n")
## ✅ R mühiti uğurla konfiqurasiya edildi!

1.5 Nümunə Məlumatlarının Hazırlanması

1.5.1 Sadə Test Məlumatları

Gəlin iki paralel test forması üçün nümunə məlumatlar yaradaq:

# Test A nəticələri (300 şagird)
set.seed(123)
test_A <- data.frame(
  student_id = 1:300,
  score = round(rnorm(300, mean = 75, sd = 12), 0),
  form = "A"
)

# Test B nəticələri (280 şagird)  
set.seed(456)
test_B <- data.frame(
  student_id = 301:580,
  score = round(rnorm(280, mean = 78, sd = 10), 0),
  form = "B"
)

# Məlumatların strukturunu yoxlayın
cat("Test A məlumatları:\n")
## Test A məlumatları:
str(test_A)
## 'data.frame':    300 obs. of  3 variables:
##  $ student_id: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ score     : num  68 72 94 76 77 96 81 60 67 70 ...
##  $ form      : chr  "A" "A" "A" "A" ...
cat("\nTest B məlumatları:\n") 
## 
## Test B məlumatları:
str(test_B)
## 'data.frame':    280 obs. of  3 variables:
##  $ student_id: int  301 302 303 304 305 306 307 308 309 310 ...
##  $ score     : num  65 84 86 64 71 75 85 81 88 84 ...
##  $ form      : chr  "B" "B" "B" "B" ...

1.5.2 Təsviri Statistikalar

# İlkin təhlil
summary_A <- summary(test_A$score)
summary_B <- summary(test_B$score)

cat("Test A nəticələrinin xülasəsi:\n")
## Test A nəticələrinin xülasəsi:
print(summary_A)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    47.0    68.0    74.0    75.4    83.0   114.0
cat("\nTest B nəticələrinin xülasəsi:\n")
## 
## Test B nəticələrinin xülasəsi:
print(summary_B)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    54.0    71.0    78.0    78.3    86.0   101.0
# Ətraflı statistikalar
stats_comparison <- data.frame(
  Statistika = c("Ortalama", "Standart Sapma", "Minimum", "Maksimum", 
                 "25% Persentil", "75% Persentil", "Şagird Sayı"),
  Test_A = c(
    round(mean(test_A$score), 2),
    round(sd(test_A$score), 2), 
    min(test_A$score),
    max(test_A$score),
    quantile(test_A$score, 0.25),
    quantile(test_A$score, 0.75),
    nrow(test_A)
  ),
  Test_B = c(
    round(mean(test_B$score), 2),
    round(sd(test_B$score), 2),
    min(test_B$score), 
    max(test_B$score),
    quantile(test_B$score, 0.25),
    quantile(test_B$score, 0.75),
    nrow(test_B)
  )
)

kable(stats_comparison, caption = "Test A və Test B-nin Müqayisəli Statistikaları")
Test A və Test B-nin Müqayisəli Statistikaları
Statistika Test_A Test_B
Ortalama 75.4 78.29
Standart Sapma 11.4 9.82
Minimum 47.0 54.00
Maksimum 114.0 101.00
25% Persentil 68.0 71.00
75% Persentil 83.0 86.00
Şagird Sayı 300.0 280.00

1.5.3 Məlumatların Vizuallaşdırılması

# Məlumatları birləşdirin
combined_data <- rbind(test_A, test_B)

# Histogram müqayisəsi
p1 <- ggplot(combined_data, aes(x = score, fill = form)) +
  geom_histogram(alpha = 0.7, position = "identity", bins = 25) +
  scale_fill_manual(values = colors_custom[1:2]) +
  labs(
    title = "Test Nəticələrinin Paylanması",
    subtitle = "Test A və Test B-nin Histogramları", 
    x = "Test Balı",
    y = "Tezlik",
    fill = "Test Forması"
  ) +
  theme_minimal()

print(p1)
Test A və Test B nəticələrinin müqayisəsi

Test A və Test B nəticələrinin müqayisəsi

# Box plot müqayisəsi  
p2 <- ggplot(combined_data, aes(x = form, y = score, fill = form)) +
  geom_boxplot(alpha = 0.7, outlier.alpha = 0.5) +
  geom_jitter(alpha = 0.3, width = 0.2, height = 0) +
  scale_fill_manual(values = colors_custom[1:2]) +
  labs(
    title = "Test Nəticələrinin Box Plot Müqayisəsi",
    x = "Test Forması", 
    y = "Test Balı",
    fill = "Test Forması"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

print(p2)
Test A və Test B nəticələrinin müqayisəsi

Test A və Test B nəticələrinin müqayisəsi


1.6 Praktiki Nümunə: Universitet Qəbul İmtahanı

1.6.1 Realistik Ssenari

Təsəvvür edin ki, Azərbaycan Universitetləri Qəbul İmtahanı ildə iki dəfə - yaz və payız fəsillərində keçirilir. Hər iki imtahanda Riyaziyyat və Şifahi hissələr var.

# Universitet qəbul imtahanının iki fəsildə keçirilən versiyalarını simulyasiya edək

# Yaz imtahanı (500 iştirakçı)
set.seed(789)
spring_exam <- data.frame(
  student_id = 1:500,
  season = "Yaz",
  math_score = round(rnorm(500, mean = 520, sd = 80), 0),
  verbal_score = round(rnorm(500, mean = 480, sd = 75), 0)
)

# Payız imtahanı (400 iştirakçı)
set.seed(321)  
fall_exam <- data.frame(
  student_id = 501:900, 
  season = "Payız",
  math_score = round(rnorm(400, mean = 535, sd = 85), 0),
  verbal_score = round(rnorm(400, mean = 465, sd = 70), 0)
)

# Ümumi balları hesablayın
spring_exam$total_score <- spring_exam$math_score + spring_exam$verbal_score
fall_exam$total_score <- fall_exam$math_score + fall_exam$verbal_score

# Məlumatları birləşdirin
university_data <- rbind(spring_exam, fall_exam)

# Xülasə statistikalar
seasonal_summary <- university_data %>%
  group_by(season) %>%
  summarise(
    İştirakçı_Sayı = n(),
    Riyaziyyat_Ortalama = round(mean(math_score), 1),
    Riyaziyyat_SD = round(sd(math_score), 1),
    Şifahi_Ortalama = round(mean(verbal_score), 1), 
    Şifahi_SD = round(sd(verbal_score), 1),
    Ümumi_Ortalama = round(mean(total_score), 1),
    Ümumi_SD = round(sd(total_score), 1),
    .groups = 'drop'
  )

kable(seasonal_summary, caption = "Yaz və Payız İmtahanlarının Müqayisəsi")
Yaz və Payız İmtahanlarının Müqayisəsi
season İştirakçı_Sayı Riyaziyyat_Ortalama Riyaziyyat_SD Şifahi_Ortalama Şifahi_SD Ümumi_Ortalama Ümumi_SD
Payız 400 540 85.2 467 67.7 1007 111
Yaz 500 520 80.4 479 75.2 998 115

1.6.2 Problemin Müəyyən Edilməsi

# Fəsillər arası fərqlərin təhlili
cat("=== FƏSİLLƏR ARASI FƏRQLƏR ===\n\n")
## === FƏSİLLƏR ARASI FƏRQLƏR ===
# Riyaziyyat fərqi
math_diff <- mean(fall_exam$math_score) - mean(spring_exam$math_score)
cat("Riyaziyyat ortalama fərqi (Payız - Yaz):", round(math_diff, 2), "\n")
## Riyaziyyat ortalama fərqi (Payız - Yaz): 20.5
# Şifahi fərqi  
verbal_diff <- mean(fall_exam$verbal_score) - mean(spring_exam$verbal_score)
cat("Şifahi ortalama fərqi (Payız - Yaz):", round(verbal_diff, 2), "\n")
## Şifahi ortalama fərqi (Payız - Yaz): -11.7
# Ümumi bal fərqi
total_diff <- mean(fall_exam$total_score) - mean(spring_exam$total_score)
cat("Ümumi bal ortalama fərqi (Payız - Yaz):", round(total_diff, 2), "\n")
## Ümumi bal ortalama fərqi (Payız - Yaz): 8.79
# Effect size hesablaması
pooled_sd_math <- sqrt((var(spring_exam$math_score) + var(fall_exam$math_score)) / 2)
effect_size_math <- math_diff / pooled_sd_math

cat("\nEffect Size (Riyaziyyat):", round(effect_size_math, 3), "\n")
## 
## Effect Size (Riyaziyyat): 0.248
# Bu fərqlərin təsiri
if (abs(effect_size_math) > 0.2) {
  cat("⚠️  Fəsillər arasında əhəmiyyətli fərq mövcuddur!\n")
  cat("🎯 Test bərabərləşdirmə zəruridir!\n")
} else {
  cat("✅ Fəsillər arasında kiçik fərq var, lakin bərabərləşdirmə tövsiyə olunur.\n")
}
## ⚠️  Fəsillər arasında əhəmiyyətli fərq mövcuddur!
## 🎯 Test bərabərləşdirmə zəruridir!

1.6.3 Vizual Təhlil

# Fəsillər üzrə nəticələrin vizuallaşdırılması
par(mfrow = c(2, 2), mar = c(4, 4, 3, 2))

# Riyaziyyat histogramları
hist(spring_exam$math_score, 
     main = "Yaz - Riyaziyyat Nəticələri", 
     xlab = "Riyaziyyat Balı",
     col = alpha(colors_custom[1], 0.7),
     xlim = c(200, 800),
     breaks = 20)

hist(fall_exam$math_score,
     main = "Payız - Riyaziyyat Nəticələri",
     xlab = "Riyaziyyat Balı", 
     col = alpha(colors_custom[2], 0.7),
     xlim = c(200, 800),
     breaks = 20)

# Şifahi histogramları
hist(spring_exam$verbal_score,
     main = "Yaz - Şifahi Nəticələri",
     xlab = "Şifahi Bal",
     col = alpha(colors_custom[3], 0.7),
     xlim = c(200, 700),
     breaks = 20)

hist(fall_exam$verbal_score, 
     main = "Payız - Şifahi Nəticələri",
     xlab = "Şifahi Bal",
     col = alpha(colors_custom[4], 0.7), 
     xlim = c(200, 700),
     breaks = 20)
Universitet qəbul imtahanlarının fəsilə görə müqayisəsi

Universitet qəbul imtahanlarının fəsilə görə müqayisəsi

1.6.4 İnteraktiv Vizuallaşdırma

# İnteraktiv scatter plot
p_interactive <- plot_ly(
  data = university_data,
  x = ~math_score, 
  y = ~verbal_score,
  color = ~season,
  colors = colors_custom[1:2],
  type = "scatter",
  mode = "markers",
  marker = list(size = 8, opacity = 0.7),
  text = ~paste(
    "İştirakçı ID:", student_id, "<br>",
    "Fəsil:", season, "<br>", 
    "Riyaziyyat:", math_score, "<br>",
    "Şifahi:", verbal_score, "<br>",
    "Ümumi:", total_score
  ),
  hovertemplate = "%{text}<extra></extra>"
) %>%
  layout(
    title = "Riyaziyyat və Şifahi Balların Əlaqəsi",
    xaxis = list(title = "Riyaziyyat Balı"),
    yaxis = list(title = "Şifahi Bal"),
    showlegend = TRUE
  )

p_interactive

İnteraktiv scatter plot - Riyaziyyat və Şifahi balların əlaqəsi


1.7 Əsas Çağırışlar və Problemlər

1.7.1 Test Bərabərləşdirməsində Qarşılaşılan Problemlər

# Müxtəlif problemləri nümayiş etdirək

# Problem 1: Çətinlik səviyyəsi fərqi
cat("=== PROBLEM 1: ÇƏTİNLİK SƏVİYYƏSİ FƏRQİ ===\n")
## === PROBLEM 1: ÇƏTİNLİK SƏVİYYƏSİ FƏRQİ ===
cat("Yaz imtahanı ortalaması:", round(mean(spring_exam$total_score), 1), "\n")
## Yaz imtahanı ortalaması: 998
cat("Payız imtahanı ortalaması:", round(mean(fall_exam$total_score), 1), "\n")
## Payız imtahanı ortalaması: 1007
cat("Fərq:", round(mean(fall_exam$total_score) - mean(spring_exam$total_score), 1), "bal\n\n")
## Fərq: 8.8 bal
# Problem 2: Variasiya fərqi  
cat("=== PROBLEM 2: VARİASİYA FƏRQİ ===\n")
## === PROBLEM 2: VARİASİYA FƏRQİ ===
cat("Yaz imtahanı standart sapması:", round(sd(spring_exam$total_score), 1), "\n")
## Yaz imtahanı standart sapması: 115
cat("Payız imtahanı standart sapması:", round(sd(fall_exam$total_score), 1), "\n") 
## Payız imtahanı standart sapması: 111
cat("Nisbət:", round(sd(fall_exam$total_score) / sd(spring_exam$total_score), 2), "\n\n")
## Nisbət: 0.97
# Problem 3: Paylanma forması fərqi
cat("=== PROBLEM 3: PAYLANMA FORMASI FƏRQİ ===\n")
## === PROBLEM 3: PAYLANMA FORMASI FƏRQİ ===
spring_skew <- psych::skew(spring_exam$total_score)
fall_skew <- psych::skew(fall_exam$total_score)

cat("Yaz imtahanı çarpıqlığı:", round(spring_skew, 3), "\n")
## Yaz imtahanı çarpıqlığı: 0
cat("Payız imtahanı çarpıqlığı:", round(fall_skew, 3), "\n")
## Payız imtahanı çarpıqlığı: -0.093
if (abs(spring_skew - fall_skew) > 0.5) {
  cat("⚠️  Paylanma formaları əhəmiyyətli dərəcədə fərqlidir!\n")
}

1.7.2 Həll Yolları

cat("=== BƏRABƏRLƏŞDİRMƏ ÜÇÜN MÖVCUD HƏLL YOLLARI ===\n\n")
## === BƏRABƏRLƏŞDİRMƏ ÜÇÜN MÖVCUD HƏLL YOLLARI ===
solutions <- data.frame(
  Metod = c(
    "Lineer Bərabərləşdirmə",
    "Ekvipersentil Bərabərləşdirmə", 
    "Kernel Bərabərləşdirmə",
    "IRT Əsaslı Bərabərləşdirmə"
  ),
  Üstünlük = c(
    "Sadə və sürətli",
    "Paylanma formasını qoruyur",
    "Hamar və dəqiq nəticələr", 
    "Maddə səviyyəsində təhlil"
  ),
  İstifadə_Sahəsi = c(
    "Normal paylanmalar",
    "Qeyri-normal paylanmalar",
    "Böyük nümunələr",
    "Çoxölçülü testlər"
  ),
  Növbəti_Dərs = c(
    "Dərs 2",
    "Dərs 3", 
    "Dərs 5",
    "Dərs 6"
  )
)

kable(solutions, caption = "Test Bərabərləşdirmə Metodlarının Müqayisəsi")
Test Bərabərləşdirmə Metodlarının Müqayisəsi
Metod Üstünlük İstifadə_Sahəsi Növbəti_Dərs
Lineer Bərabərləşdirmə Sadə və sürətli Normal paylanmalar Dərs 2
Ekvipersentil Bərabərləşdirmə Paylanma formasını qoruyur Qeyri-normal paylanmalar Dərs 3
Kernel Bərabərləşdirmə Hamar və dəqiq nəticələr Böyük nümunələr Dərs 5
IRT Əsaslı Bərabərləşdirmə Maddə səviyyəsində təhlil Çoxölçülü testlər Dərs 6

1.8 Dərsin Xülasəsi

1.8.1 Öyrəndiklərimiz

Bu dərsdə aşağıdakı mövzuları əhatə etdik:

✅ - est bərabərləşdirməsinin mahiyyəti - Nə üçün lazım olduğunu öyrəndik
✅ - Üfüqi vs Şaquli bərabərləşdirmə - İki əsas yanaşmanı fərqləndirdik
✅ - R mühitinin konfiqurasiyası - Lazım olan paketləri quraşdırdıq
✅ - Məlumat yaratma və təhlil - Test məlumatlarını simulyasiya etdik
✅ - Problem identifikasiyası - Real problemləri müəyyən etdik

1.8.2 Praktiki Nəticələr

# Bu dərsdə yaratdığımız məlumatları saxlayaq
cat("=== YARADILMIŞ MƏLUMAT STRUKTURLARI ===\n\n")
## === YARADILMIŞ MƏLUMAT STRUKTURLARI ===
cat("1. test_A: ", nrow(test_A), " şagirdin A formasında nəticələri\n")
## 1. test_A:  300  şagirdin A formasında nəticələri
cat("2. test_B: ", nrow(test_B), " şagirdin B formasında nəticələri\n") 
## 2. test_B:  280  şagirdin B formasında nəticələri
cat("3. university_data: ", nrow(university_data), " iştirakçının universitet imtahanı nəticələri\n\n")
## 3. university_data:  900  iştirakçının universitet imtahanı nəticələri
cat("Bu məlumatlar növbəti dərslərə ötürüləcək!\n")
## Bu məlumatlar növbəti dərslərə ötürüləcək!
# Məlumatları qorumaq
save(test_A, test_B, university_data, spring_exam, fall_exam,
     file = "lesson1_data.RData")
cat("✅ Məlumatlar lesson1_data.RData faylında saxlanıldı\n")
## ✅ Məlumatlar lesson1_data.RData faylında saxlanıldı

1.9 Növbəti Addımlar

1.9.1 Dərs 2-yə Hazırlıq

Növbəti dərsdə Lineer Bərabərləşdirmə Metodlarını öyrənəcəyik. Hazırlıq üçün:

  1. 📖 Bu dərsin materiallarını yenidən nəzərdən keçirin
  2. 💻 R kodlarını özünüz icra edin və nəticələri müqayisə edin
  3. 🤔 Universitetinizin/məktəbinizin test sistemlərini düşünün
  4. ❓ Test bərabərləşdirmə ilə bağlı suallarınızı qeyd edin

1.9.2 Əlavə Tədqiqat Mövzuları

İstəyənlər üçün əlavə araşdırma mövzuları:

  • Nəzəri əsaslar: Lord & Wingersky (1984) klassik məqaləsi

  • Beynəlxalq təcrübə: PISA, TIMSS testlərində bərabərləşdirmə

  • Əlavə R paketləri: plink, equateIRT, TAM paketləri

  • Məlumat vizuallaşdırması: shiny ilə interaktiv tətbiqlər


1.10 Tapşırıqlar və Məşqlər

1.10.1 Tapşırıq 1: Öz Məlumatlarınızla Təcrübə

# Öz test məlumatlarınızı yaradın
set.seed(sizin_doğum_iliniz)  # Doğum ilinizi yazın

# İki test forması üçün məlumatlar yaradın
# Formaların çətinlik səviyyələri fərqli olsun

my_test_easy <- data.frame(
  student_id = 1:200,
  score = round(rnorm(200, mean = ???, sd = ???), 0)  # Doldur
)

my_test_hard <- data.frame(
  student_id = 201:400, 
  score = round(rnorm(200, mean = ???, sd = ???), 0)  # Doldur
)

# Statistikaları müqayisə edin
# Vizuallaşdırın
# Problemləri müəyyən edin

1.10.2 Tapşırıq 2: Real Məlumatlarla İş

Əgər əlinizdə real test məlumatları varsa:

  1. Məlumatları R-ə import edin
  2. Əsas statistikaları hesablayın
  3. Histogram və boxplot çəkin
  4. Bərabərləşdirmə ehtiyacını qiymətləndirin

1.10.3 Tapşırıq 3: Araşdırma Sualları

Aşağıdakı sualları araşdırın:

  1. Nümunə ölçüsünün təsiri: 50, 100, 500 şagirdlik nümunələrlə nə fərq var?
  2. Paylanma formasının rolu: Normal vs. çarpıq paylanmaların müqayisəsi
  3. Çətinlik fərqinin həddləri: Nə qədər fərq “çox” hesab edilir?
# Nümunə ölçüsünün təsirini araşdırın
sample_sizes <- c(50, 100, 200, 500, 1000)

for (n in sample_sizes) {
  # Her ölçü üçün test məlumatları yaradın
  # Statistikaları hesablayın
  # Nəticələri müqayisə edin
}

1.11 Əlavə Resurlar

1.11.1 Kitablar və Məqalələr

📖 Əsas Kitablar: - Kolen, M. J., & Brennan, R. L. (2014). Test Equating, Scaling, and Linking

  • von Davier, A. A. (2011). Statistical Models for Test Equating, Scaling, and Linking

  • Dorans, N. J., et al. (2007). Linking and Aligning Scores and Scales

📄 Məqalələr:

  • Angoff, W. H. (1971). Scales, norms, and equivalent scores

  • Lord, F. M. (1980). Applications of item response theory

  • Holland, P. W., & Dorans, N. J. (2006). Linking and equating

1.11.2 Online Resurlar

🌐 Veb saytlar:

💻 GitHub Repositoriyaları:

1.11.3 R Paketləri Sənədləri

# Paket sənədlərinə baxın
help(package = "equate")
vignette("equate")

# Funksiyalar haqqında məlumat
?linear.equating
?equipercentile.equating
?frequency.table

1.12 Faydalı Funksiyalar və Kodlar

1.12.1 Sürətli Statistika Funksiyası

# Sürətli statistika funksiyası
quick_test_stats <- function(scores, test_name = "Test") {
  cat("=== ", test_name, " STATISTICS ===\n")
  cat("Şagird sayı:", length(scores), "\n")
  cat("Ortalama:", round(mean(scores), 2), "\n")
  cat("Standart sapma:", round(sd(scores), 2), "\n")
  cat("Minimum:", min(scores), "\n") 
  cat("Maksimum:", max(scores), "\n")
  cat("Çarpıqlıq:", round(psych::skew(scores), 3), "\n")
  cat("Kurtosis:", round(psych::kurtosi(scores), 3), "\n")
  cat("25% persentil:", quantile(scores, 0.25), "\n")
  cat("75% persentil:", quantile(scores, 0.75), "\n")
  cat("========================\n\n")
  
  return(invisible(list(
    n = length(scores),
    mean = mean(scores), 
    sd = sd(scores),
    min = min(scores),
    max = max(scores),
    skewness = psych::skew(scores),
    kurtosis = psych::kurtosi(scores)
  )))
}

# Test edin
quick_test_stats(test_A$score, "Test A")
## ===  Test A  STATISTICS ===
## Şagird sayı: 300 
## Ortalama: 75.4 
## Standart sapma: 11.4 
## Minimum: 47 
## Maksimum: 114 
## Çarpıqlıq: 0.339 
## Kurtosis: -0.084 
## 25% persentil: 68 
## 75% persentil: 83 
## ========================
quick_test_stats(test_B$score, "Test B")
## ===  Test B  STATISTICS ===
## Şagird sayı: 280 
## Ortalama: 78.3 
## Standart sapma: 9.82 
## Minimum: 54 
## Maksimum: 101 
## Çarpıqlıq: -0.091 
## Kurtosis: -0.596 
## 25% persentil: 71 
## 75% persentil: 86 
## ========================

1.12.2 Vizuallaşdırma Funksiyası

# İki testin müqayisəsi üçün vizuallaşdırma funksiyası
compare_two_tests <- function(scores1, scores2, names = c("Test 1", "Test 2")) {
  
  # Məlumatları hazırlayın
  combined_data <- data.frame(
    score = c(scores1, scores2),
    test = rep(names, c(length(scores1), length(scores2)))
  )
  
  # Histogram
  p1 <- ggplot(combined_data, aes(x = score, fill = test)) +
    geom_histogram(alpha = 0.7, position = "identity", bins = 20) +
    scale_fill_manual(values = colors_custom[1:2]) +
    labs(title = "Test Nəticələrinin Paylanması",
         x = "Test Balı", y = "Tezlik") +
    theme_minimal()
  
  # Density plot  
  p2 <- ggplot(combined_data, aes(x = score, color = test, fill = test)) +
    geom_density(alpha = 0.3) +
    scale_color_manual(values = colors_custom[1:2]) +
    scale_fill_manual(values = colors_custom[1:2]) +
    labs(title = "Sıxlıq Paylanması",
         x = "Test Balı", y = "Sıxlıq") +
    theme_minimal()
  
  # Box plot
  p3 <- ggplot(combined_data, aes(x = test, y = score, fill = test)) +
    geom_boxplot(alpha = 0.7) +
    geom_jitter(alpha = 0.3, width = 0.2) +
    scale_fill_manual(values = colors_custom[1:2]) +
    labs(title = "Box Plot Müqayisəsi",
         x = "Test", y = "Test Balı") +
    theme_minimal() +
    theme(legend.position = "none")
  
  # Q-Q plot
  library(gridExtra)
  grid.arrange(p1, p2, p3, ncol = 2, nrow = 2)
  
  return(list(histogram = p1, density = p2, boxplot = p3))
}

# Test edin
compare_two_tests(test_A$score, test_B$score, c("Test A", "Test B"))

## $histogram

## 
## $density

## 
## $boxplot


1.13 Texniki Qeydlər

1.13.1 Sistem Tələbləri

Bu dərs materialları üçün minimum tələblər:

  • R versiyası: 4.0.0 və ya daha yeni

  • RStudio: 1.4.0 və ya daha yeni (tövsiyə edilir)

  • RAM: Minimum 4GB, tövsiyə edilən 8GB+

  • Disk yeri: 2GB boş yer

1.13.2 Məlum Problemlər və Həlləri

# Problem 1: Paket quraşdırma xətaları
if (!require(equate)) {
  install.packages("equate", dependencies = TRUE)
  library(equate)
}

# Problem 2: Encoding problemləri
Sys.setlocale("LC_ALL", "en_US.UTF-8")

# Problem 3: Plotting problemləri  
if (!require(ggplot2)) {
  install.packages("ggplot2")
  library(ggplot2)
}

# Problem 4: Knitr problemləri
if (!require(knitr)) {
  install.packages("knitr")
  library(knitr)
}

1.13.3 Performance Optimizasiyası

Böyük məlumat dəstləri üçün:

# 1. Məlumat tiplərinə diqqət edin
test_scores <- as.integer(test_scores)  # Integer daha sürətlidir

# 2. Vectorization istifadə edin
# Yavaş:
for (i in 1:length(scores)) {
  transformed[i] <- transform_function(scores[i])
}

# Sürətli:
transformed <- sapply(scores, transform_function)

# 3. Böyük məlumatlar üçün data.table istifadə edin
library(data.table)
DT <- data.table(test_data)

1.14 Dərs Planı və Zaman Cədvəli

1.14.1 Tövsiyə edilən öyrənmə müddəti: 2-3 saat

Vaxt Bölmə Fəaliyyət
0:00-0:30 Giriş Nəzəri materialla tanışlıq
0:30-1:00 R Setup Paket quraşdırma və konfiqurasiya
1:00-1:30 Məlumat Yaratma Nümunə məlumatlarla iş
1:30-2:00 Vizuallaşdırma Qrafik və təhlil
2:00-2:30 Praktiki Nümunə Universitet imtahanı analizi
2:30-3:00 Tapşırıqlar Müstəqil iş

1.14.2 Öyrənmə yoxlanış sualları

  1. ✓ Test bərabərləşdirmə nə üçün lazımdır?
  2. ✓ Üfüqi və şaquli bərabərləşdirmə arasındakı fərq nədir?
  3. ✓ Test nəticələrində hans statistik göstəricilər əhəmiyyətlidir?
  4. ✓ Paylanma forması nə üçün vacibdir?
  5. ✓ R-də hansı paketlər test bərabərləşdirmə üçün istifadə olunur?

1.15 Müəllif və Mənbələr

Dərs materialının müəllifi: Test Bərabərləşdirmə Kursu Komandası
Son yeniləmə: 2025-07-15
Kurs versiyası: 1.0

1.15.1 İstinadlar

  1. Kolen, M. J., & Brennan, R. L. (2014). Test equating, scaling, and linking: Methods and practices (3rd ed.). Springer.

  2. von Davier, A. A., Holland, P. W., & Thayer, D. T. (2004). The kernel method of test equating. Springer.

  3. Dorans, N. J., Pommerich, M., & Holland, P. W. (Eds.). (2007). Linking and aligning scores and scales. Springer.

  4. R Core Team (2024). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria.


Bu dərs materialı açıq mənbə prinsiplərinə uyğun olaraq hazırlanmışdır və təhsil məqsədləri üçün sərbəst istifadə edilə bilər.